Fix event-upcall masking when creating a trap frame
authorkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Thu, 4 Aug 2005 16:53:11 +0000 (16:53 +0000)
committerkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Thu, 4 Aug 2005 16:53:11 +0000 (16:53 +0000)
on guest kernel stack. Previously an exception would
clear an already-set mask.
Signed-off-by: Keir Fraser <keir@xensource.com>
xen/arch/x86/x86_32/entry.S
xen/arch/x86/x86_64/entry.S

index d33665d0a229acfdbf98c2f0a15062ecc24978df..52a5449f74929f248bc50bbaedbeba6148f940d1 100644 (file)
@@ -335,7 +335,8 @@ FLT14:  movl %eax,%gs:(%esi)
         movl VCPU_vcpu_info(%ebx),%eax
         pushl VCPUINFO_upcall_mask(%eax)
         testb $TBF_INTERRUPT,%cl
-        setnz VCPUINFO_upcall_mask(%eax) # TBF_INTERRUPT -> clear upcall mask
+        setnz %al                        # TBF_INTERRUPT -> set upcall mask
+        orb  %al,VCPUINFO_upcall_mask(%eax)
         popl %eax
         shll $16,%eax                    # Bits 16-23: saved_upcall_mask
         movw UREGS_cs+4(%esp),%ax        # Bits  0-15: CS
index 3ba426ad2a65b451e94defa29eeb1930e10a2a00..d71e38ace481bdc32cd48ab315e9ee078fd25203 100644 (file)
@@ -314,7 +314,8 @@ FLT4:   movq  %rax,16(%rsi)             # RFLAGS
         movq  VCPU_vcpu_info(%rbx),%rax
         pushq VCPUINFO_upcall_mask(%rax)
         testb $TBF_INTERRUPT,%cl
-        setnz VCPUINFO_upcall_mask(%rax)# TBF_INTERRUPT -> clear upcall mask
+        setnz %al                       # TBF_INTERRUPT -> set upcall mask
+        orb   %al,VCPUINFO_upcall_mask(%rax)
         popq  %rax
         shlq  $32,%rax                  # Bits 32-39: saved_upcall_mask
         movw  UREGS_cs+8(%rsp),%ax      # Bits  0-15: CS